package entity

import (
	"server/world/scene"
)

var _ scene.Entity = (*NPC)(nil)

// NPC NPC实体，实现Entity接口
type NPC struct {
	Entity
	Name     string // NPC名称
	ScriptID string // NPC脚本ID
	DialogID string // 对话ID
}

// NewNPC 创建新的NPC实体
func NewNPC(id int64, name, scriptID, dialogID string, x, y float64) *NPC {
	n := &NPC{
		Name:     name,
		ScriptID: scriptID,
		DialogID: dialogID,
	}
	n.id = id
	n.x, n.y = x, y
	return n
}

// GetType 获取实体类型，实现Entity接口
func (n *NPC) GetType() scene.EntityType {
	return scene.EntityTypeNPC
}

// Remove 移除NPC实例
func (n *NPC) Remove() {
	if n.layer == nil {
		return
	}
	layer := n.layer
	layer.Remove(n, n.x, n.y)
}

// UpdatePosition 更新NPC位置
func (n *NPC) UpdatePosition(newX, newY float64) {
	if n.layer == nil {
		return
	}
	if !n.SetStatus(scene.EntityStatusNone, scene.EntityStatusMovement) {
		return
	}
	defer func() {
		n.status = int32(scene.EntityStatusNone)
	}()

	layer := n.layer
	if layer.Move(n, newX, newY) {
		n.x, n.y = newX, newY
	}
}